export interface PemissionRes {
    apply_permissions_token: string; // 预授权token 用于微信小程序发起签约
    code: string;        // 错误码
    msg: string;        // 错误提示
}

export interface QueryPemissionRes {
    service_id: string;       // 该服务ID有本接口对应产品的权限。
    appid: string;        // 与授权成功时记录的商户号绑定的appid （返回用户最近一次授权成功时记录的appid，不受当前请求参数影响）
    mchid: string;        // 调用接口提交的商户号 （返回用户最近一次授权成功时记录的mchid，不受当前请求参数影响）
    openid: string        // 微信用户在商户对应appid下的唯一标识。
    authorization_code: string  // 预授权成功时的授权协议号  示例值：1275342195190894594
    authorization_state: string  // 标识用户授权服务情况。 UNAVAILABLE：用户未授权服务  AVAILABLE：用户已授权服务 示例值：UNAVAILABLE
    cancel_authorization_time: string  // 最近一次解除授权时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss.sss表示时分秒毫秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒
    authorization_success_time: string  // 最近一次授权成功时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss.sss表示时分秒毫秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 示例值：2015-05-20T13:29:35.120+08:00
}


export interface createServiceOrderReq {
    out_order_no: string   //  商户系统内部服务订单号（不是交易单号），要求此参数只能由数字、大小写字母_-|*组成，且在同一个商户号下唯一。详见[商户订单号]。
    service_id: string;   // 该服务ID有本接口对应产品的权限。
    appid: string;        // 与授权成功时记录的商户号绑定的appid （返回用户最近一次授权成功时记录的appid，不受当前请求参数影响）
    openid: string        // 微信用户在商户对应appid下的唯一标识。 免确认订单：必填 需确认订单：不填
    notify_url: string  // 商户接收用户确认订单和付款成功回调通用于介绍本订单所提供的服务知的地址。
    service_introduction: string // 服务信息，当参数长度超过20个字符时，报错处理。
    need_user_confirm: boolean  // 枚举值：false：免确认订单 true：需确认订单
    attach?: string  // 商户数据包可存放本订单所需信息，需要先urlencode后传入。 当商户数据包总长度超出256字符时，报错处理。
    post_payments?: Array<postPayments>; //array
    post_discounts?: Array<postDiscounts>; //array
    time_range: timeRange,
    location?: location
    risk_fund?: riskFund
}

export interface serviceOrderCompleteReq {
    service_id: string;   // 该服务ID有本接口对应产品的权限。
    appid: string;        // 与授权成功时记录的商户号绑定的appid （返回用户最近一次授权成功时记录的appid，不受当前请求参数影响）
    total_amount: number  // 1、金额：数字，必须≥0（单位：分），只能为整数，详见支付金额。  2、总金额 =（完结付费项目1…+完结付费项目n）-（完结商户优惠项目1…+完结商户优惠项目n）3、总金额上限1）【评估不通过：交押金】模式：总金额≤创单时填写的“订单风险金额”2）【评估不通过：拒绝】模式：总金额≤“每个服务ID的风险金额上限”
    post_payments: Array<postPayments>; //array
    post_discounts?: Array<postDiscounts>; //array
    time_range: timeRange, //服务时间范围，创建订单未填写服务结束时间，则完结的时候，服务结束时间必填  如果传入，用户侧则显示此参数。
    location?: location,
    profit_sharing?: string //完结订单分账接口标记。分账开通流程，详见 false：不分账，默认：false   true：分账。 示例值：false
    goods_tag?: string // 订单优惠标记，代金券或立减金优惠的参数，说明详见代金券或立减金优惠
}

// 后付费商户优惠列表，最多包含30条商户优惠。 如果传入，用户侧则显示此参数。
export interface postDiscounts {
    name: string;       // 优惠名称说明；name和description若填写，则必须同时填写，优惠名称不可重复描述。
    description: string;         // 优惠使用条件说明。  name和description若填写，则必须同时填写。
    count?: number;        // 	优惠的数量。
}

// 后付费项目列表，最多包含100条付费项目。 如果传入，用户侧则显示此参数
export interface postPayments {
    name?: string;       // 相同订单号下不能出现相同的付费项目名称，当参数长度超过20个字符时，报错处理。
    amount: number;        // 此付费项目总金额，大于等于0，单位为分，等于0时代表不需要扣费，只能为整数，详见支付金额。如果填写了“付费项目名称”，则amount或description必须填写其一，或都填。
    description?: number;         // 描述计费规则，不超过30个字符，超出报错处理。如果填写了“付费项目名称”，则amount或description必须填写其一，或都填。
    count?: number;            // 付费项目的数量。
}

// 服务时间段
export interface timeRange {
    start_time?: string;       // 服务开始时间备注 用户端展示用途。  用户下单时确认的服务开始时间（比如用户今天下单，明天开始接受服务，这里指的是明天的服务开始时间）。支持三种格式：yyyyMMddHHmmss、yyyyMMdd和 OnAccept
    start_time_remark?: string;         // 服务开始时间备注说明，服务开始时间有填时，可填写服务开始时间备注，不超过20个字符，超出报错处理。
    end_time?: string;        // 预计服务结束时间 格式同start_time
    end_time_remark?: string // 预计服务结束时间备注说明，预计服务结束时间有填时，可填写预计服务结束时间备注，不超过20个字符，超出报错处理。
}

// 服务位置
export interface location {
    start_location?: string;       // 开始使用服务的地点，不超过50个字符，超出报错处理。   【建议】1、用户下单时【未确定】服务结束地点，不填写。2、服务在同一地点开始和结束，不填写。
    end_location: string;         // 1、结束使用服务的地点，不超过50个字符，超出报错处理 。 2、填写了服务开始地点，才能填写服务结束地点。
}

// 订单风险金
export interface riskFund {
    name: string;       // 风险金名称 枚举值：【先免模式】（评估不通过可交押金）可填名称为  DEPOSIT：押金  ADVANCE：预付款 CASH_DEPOSIT：保证金【先享模式】（评估不通过不可使用服务）可填名称为ESTIMATE_ORDER_COST：预估订单费用
    amount: number;         // 风险金额 1、结束使用服务的地点，不超过50个字符，超出报错处理 。 2、填写了服务开始地点，才能填写服务结束地点。
    description: string  // 文字，不超过30个字。
}


